package map;

import java.util.HashMap;
import java.util.Map;

/**
 *  java.util.Map接口   查找表
 *  Map体现的结构像是一个多行两列的表格,其中左列称为Key,右列称为value
 *  Map总是成对儿(Key-value键值对儿)保存数据,并且总是根据Key获取其对应的value
 *
 *  常用实现类:
 *  java.util.HashMap:称为散列表,使用散列算法实现的Map,当今查询速度最快的数据结构
 */
public class MapDemo {
    public static void main(String[] args) {
        Map<String,Integer> map = new HashMap<>();

        /*
            V put(K k,V v)
            将给定的键值对儿存入Map
            Map有一个要求,即:Key不允许重复(Key的equals比较)
            因此如果使用重复的Key存入value,则是替换value操作,此时put方法的返回值就是被替换的value.否则返回值为null
         */

        //注意:如果value的类型是包装类,切记不要用基本类型接收返回值,避免因自动拆箱导致的空指针异常
        Integer value = map.put("语文",40);
        System.out.println(value);
        map.put("数学",120);
        map.put("物理",90);
        map.put("语文",40);
        map.put("英语",20);
        map.put("化学",50);
        System.out.println(map);

        value = map.put("物理",80);
        System.out.println(value);//90,物理被替换的值
        System.out.println(map);

        /*
            V get(Object Key)
            根据给定的Keg获取对应的value.若给定的Key不存在则返回值为null.
         */
        value = map.get("语文");
        System.out.println("语文:"+value);
        value = map.get("体育");
        System.out.println("体育:"+value);//null

        System.out.println("size:"+map.size());

       /*
            V remove(Object Key)
            删除给定的key所对应的键值对,返回值为这个key对应的value
        */
        value = map.remove("英语");
        System.out.println(value);
        System.out.println(map);

        /*
            boolean containsKey(Object key)
            判断是否包含key
            boolean containsValue(Object value)
            判断是否包含value
         */
        boolean ck = map.containsKey("英语");
        System.out.println(ck);
        boolean cv = map.containsValue(80);
        System.out.println(cv);
    }
}
